package ejecutables;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

import gramaticaPrecedencia.GramaticaSerializable;

import analizadorCadena.Analizador;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class AnalizadorDeCadenas {

	/**
	 * Levanta la tabla y las producciones de la gramática
	 * y analiza cadenas.
	 * @param args[0] path del xml que contiene la tabla y la
	 * gramática.
	 * @param args[1] archivo que contiene cadenas a ser analizadas.
	 */
	public static void main(String[] args) {
		
		File archivoGramatica = new File(args[0]);
		File archivoCadenas = new File(args[1]);
		
		if(!archivoGramatica.exists()){
			System.out.println("No existe el archivo");
		}
		
		StringBuffer xml = new StringBuffer();
		XStream xStream = new XStream(new DomDriver());
		GramaticaSerializable gramaticaSerializable;
		
		try {
			BufferedReader bufferReaderXML = new BufferedReader(new InputStreamReader(new FileInputStream(archivoGramatica)));
			while(bufferReaderXML.ready()){
				xml.append(bufferReaderXML.readLine());
			}
			gramaticaSerializable = (GramaticaSerializable)xStream.fromXML(xml.toString());
			System.out.println("El archivo se ha cargado correctamente...");
			
			BufferedReader bufferReaderTXT = new BufferedReader(new InputStreamReader(new FileInputStream(archivoCadenas)));
			Analizador analizador = new Analizador(gramaticaSerializable.getTabla(),
					gramaticaSerializable.getProducciones(),
					gramaticaSerializable.getSimboloInicial().getCaracter()); 
			String cadena = bufferReaderTXT.readLine(); 
			while( cadena != null) {
				if (!cadena.startsWith("#")) {
					if (!cadena.contains(new StringBuffer("$"))){
						System.out.println("Analizando cadena \"" + cadena + "\"" );
						analizador.cadenaValida(cadena);
					}
					else {
						System.out.println("L a cadena no debe contener el simbolo $");
					}
				}
				else {
					System.out.println(cadena);
				}
				cadena = bufferReaderTXT.readLine();
			}
		}
		catch (FileNotFoundException e) {
			System.err.println(e.getMessage());
		}
		catch (IOException e) {
			System.err.println(e.getMessage());
		}
	}
}
